package com.xbongbong.paas.model;

import com.xbongbong.paas.domain.entity.PaasStageEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;

import java.util.List;
import java.util.Map;

/**
 * 阶段
 * @author 李少杰
 * @version v1.0.0
 * @date 2021/11/17 16:39
 */
public interface PaasStageModel extends IModel<PaasStageEntity> {

    @Override
    Integer insert(PaasStageEntity entity) throws XbbException;

    /**
     * 条件查找
     * @param param 查询条件
     * @return
     */
    @Override
    List<PaasStageEntity> findEntitys(Map<String, Object> param);

    /**
     * 主键查找
     * @param key
     * @param corpid
     * @return
     */
    PaasStageEntity getByKey(Long key, String corpid);

    /**
     * 通过formId + code获取到一个阶段实体
     * 同一个form下code肯定唯一，但是多个form之间可能不唯一（新初始化的form都用的默认阶段code - 1、2、3、4...）
     * @param corpid 公司id
     * @param formId 模板id
     * @param code 阶段code
     * @return com.xbongbong.saas.domain.entity.PaasStageEntity
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    PaasStageEntity getByCode(String corpid, Long formId, String code);

    /**
     * 更新启用状态
     * @param corpid
     * @param id
     * @param enable
     */
    void updateEnable(String corpid, Integer id, Integer enable);

    /**
     * 保存
     * @param paasStageEntity
     * @return
     * @throws XbbException
     */
    Integer save(PaasStageEntity paasStageEntity) throws XbbException;

    /**
     * 批量插入
     * @param list
     */
    void insertBatch(List<PaasStageEntity> list);

    /**
     * 排序
     * @param corpid
     * @param formId
     * @param sortMap
     */
    void sort(String corpid, Long formId, Map<Long,Integer> sortMap);

    /**
     * 获取阶段列表
     * @param formId
     * @param corpId
     * @return
     */
    List<PaasStageEntity> getListByFormId(Long formId, String corpId);

    /**
     * 获取阶段首个阶段
     * @param corpid
     * @param formId
     * @return
     */
    PaasStageEntity getFirstStage(String corpid, Long formId);

    /**
     * 获取阶段下个阶段
     * @param corpid
     * @param formId
     * @param sort
     * @return
     */
    PaasStageEntity getNextStage(String corpid, Long formId, Integer sort);

    /**
     * 获取区间内的阶段记录
     * @param startSort
     * @param endSort
     * @param corpid
     * @param formId
     * @return
     */
    List<Integer> getIntervalCodeList(Integer startSort, Integer endSort, String corpid, Long formId);

    /**
     * 批量更新
     * @param paasStageEntityList
     * @param corpid
     */
    void updateBatch(List<PaasStageEntity> paasStageEntityList, String corpid);

    void updateBatchDefaultAndLinkOption(List<PaasStageEntity> paasStageEntityList, String corpid);

    /**
     * 镜像回退 批量更新
     * @param paasStageEntityList
     * @param corpid
     */
    void updateBatch4MirrorRollback(List<PaasStageEntity> paasStageEntityList, String corpid);

    /**
     * 更新阶段名
     * @param id
     * @param name
     */
    void updateName(Long id, String name);

    /**
     * 删除
     * @param entity
     * @return
     */
    Integer delete(PaasStageEntity entity);

    /**
     * 批量删除
     * @param paasStageEntityList
     * @return
     */
    Integer deleteBatch(List<PaasStageEntity> paasStageEntityList, String corpid);
}
